package Bean;

import java.sql.Date;
import java.util.ArrayList;

import DAO.DAOExceptionMelhorCinema;
import DAO.DAOValor;
import Model.Cadeira;
import Model.Filme;
import Model.Sessao;
import Model.Usuario;
import Model.Valor;

public class BeanIngresso {

	private int cod_Ingresso;
	private Usuario usuario;
	private ArrayList<Double> valores;
	private Date dataCompra;
	private Date dataSessao;
	private String formatadaData_sessao;
	private ArrayList<Cadeira> cadeiras;
	private Boolean pagamentoDinheiro;
	private String numeroCartao;
	private String empresaCartao;
	private Sessao sessao;
	private ArrayList<Valor> categoriaValor;
	private int quantidade;
	private float totalValor;
	private boolean finalizado;
	private boolean finalSemana;

	public BeanIngresso(int codIngresso, Usuario usuario,
			ArrayList<Double> valores, Date dataCompra, Date dataSessao,
			ArrayList<Cadeira> cadeiras, Boolean pagamentoDinheiro,
			String numeroCartao, String empresaCartao, Sessao sessao,
			ArrayList<Valor> categoriaValor, int quantidade) {
		super();
		cod_Ingresso = codIngresso;
		this.usuario = usuario;
		this.valores = valores;
		this.dataCompra = dataCompra;
		this.dataSessao = dataSessao;
		this.cadeiras = cadeiras;
		this.pagamentoDinheiro = pagamentoDinheiro;
		this.empresaCartao = empresaCartao;
		this.sessao = sessao;
		this.categoriaValor = categoriaValor;
		this.quantidade = quantidade;
		this.finalizado = false;
		this.finalSemana = false;
	}

	public BeanIngresso() {
		super();
		this.empresaCartao = "";
		// TODO Auto-generated constructor stub
	}

	public boolean isFinalSemana() {
		return finalSemana;
	}

	public void setFinalSemana(boolean finalSemana) {
		this.finalSemana = finalSemana;
	}

	public String getFormatadaData_sessao() {

		String data = "";
		if (dataSessao != null) {
			data = dataSessao.toString().substring(8, 10) + "/"
					+ dataSessao.toString().substring(5, 7) + "/"
					+ dataSessao.toString().substring(0, 4);
		}
		return data;
	}

	public int getCod_Ingresso() {
		return cod_Ingresso;
	}

	public void setCod_Ingresso(int codIngresso) {
		cod_Ingresso = codIngresso;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public ArrayList<Double> getValores() {
		return valores;
	}

	public void setValores(ArrayList<Double> valores) {
		this.valores = valores;
	}

	public Date getDataCompra() {
		return dataCompra;
	}

	public void setDataCompra(Date dataCompra) {
		this.dataCompra = dataCompra;
	}

	public Date getData_sessao() {
		return dataSessao;
	}

	public void setData_sessao(Date dataSessao) {
		this.dataSessao = dataSessao;
	}

	public ArrayList<Cadeira> getCadeiras() {
		return cadeiras;
	}

	public void setCadeiras(ArrayList<Cadeira> cadeiras) {
		this.cadeiras = cadeiras;
	}

	public Boolean getPagamentoDinheiro() {
		return pagamentoDinheiro;
	}

	public void setPagamentoDinheiro(Boolean pagamentoDinheiro) {
		this.pagamentoDinheiro = pagamentoDinheiro;
	}

	public String getNumeroCartao() {
		return numeroCartao;
	}

	public void setNumeroCartao(String numeroCartao) {
		this.numeroCartao = numeroCartao;
	}

	public String getEmpresaCartao() {
		return empresaCartao;
	}

	public void setEmpresaCartao(String empresaCartao) {
		this.empresaCartao = empresaCartao;
	}

	public Sessao getSessao() {
		return sessao;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}

	public ArrayList<Valor> getCategoriaValor() {
		return categoriaValor;
	}

	public void setCategoriaValor(ArrayList<Valor> categoriaValor) {
		this.categoriaValor = categoriaValor;
	}

	public int getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public boolean isFinalizado() {
		return finalizado;
	}

	public void setFinalizado(boolean finalizado) {
		this.finalizado = finalizado;
	}

	public float getTotalValor() throws DAOExceptionMelhorCinema {
		float resultado = 0;
		DAOValor dao = new DAOValor();
		if (this.cadeiras != null) {
			for (int i = 0; i < this.cadeiras.size(); i++) {
				if (cadeiras.get(i).getValor() != null) {

					// Se for 3D tem acrescimo
					if (this.getSessao().getSala().getTecnologia().equals("Tecnologia 3D")) {

						dao = new DAOValor();
						Valor v = dao.procurar(3);
						resultado = resultado + v.getValor();

					}

					if ((this.dataSessao.getDay() == 1)
							|| (this.dataSessao.getDay() == 6)
							|| (this.dataSessao.getDay() == 7)) {
						try {
							dao = new DAOValor();
							Valor v = dao.procurar(2);
							resultado = resultado + v.getValor();
						} catch (DAOExceptionMelhorCinema e) {
							resultado = resultado + 0;
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

					} else {
						try {
							dao = new DAOValor();
							Valor v = dao.procurar(1);
							resultado = resultado + v.getValor();
						} catch (DAOExceptionMelhorCinema e) {
							// TODO Auto-generated catch block
							resultado = resultado + 0;
							e.printStackTrace();
						}

					}
					if ((cadeiras.get(i).getValor().getCodigo() != 1)
							&& (cadeiras.get(i).getValor().getCodigo() != 2)) {
						dao = new DAOValor();
						Valor v = dao.procurar(cadeiras.get(i).getValor()
								.getCodigo());
						resultado = resultado - v.getValor();
					}

				}

			}

		}

		return resultado;

	}

}
